跟着Kaggle学习Machine Learning

1 熟悉数据

1.1 了解概况

可以通过DataFrame.describe()或者DataFrame.columns等指令来了解概况

1.2 处理缺失数据

  • 直接删除:例如DataFrame = DataFrame.dropna(),这并不是最好的办法,但对于某一缺失大多数值的特征,可能很有用

  • 估算:用数字(通常为平均值)填充缺失的数据,大多数情况下,估算值并不完全正确,但它通常比完全删除更好

  • one-hot encoding:分类数据是指仅采用有限数值(比如汽车种类,客舱等级)的数据类型,对于这类数据,采用one-hot encoding方法,(这部分不懂)

1.3 选择训练集和预测目标


2 构建模型

2.1 选择合适的机器学习模型

2.2 用训练集及其对应的目标值训练模型

2.3 用训练好的模型预测新数据

如果没有新数据,可以将训练集划分为两部分,使其中一部分作为新数据

模型验证 Model Validation

多数情况下,模型质量是用预测准确度来衡量的

如果模型对于数据集来说过于复杂,捕捉到了所有特征,虽然对于训练集几乎完美匹配,但是在验证新数据时表现不佳,这种现象称为过拟合(overfitting)

而如果模型过于简单、拟合能力不够,没有捕捉到关键特征,不仅预测新数据不准确,对于训练集也不匹配,这种现象称为欠拟合(underfitting)

通常我们更关注新数据的准确度,下图中红色验证曲线的最低点就是过拟合与欠拟合之间的最佳拟合点

例如,对于决策树模型DecisionTreeRegressor,可以通过尝试赋予参数max_leaf_nodes不同数值来寻找最佳拟合点

相比而言,随机森林模型RandomForestRegressor使用很多树,通过平均每个树的预测来进行预测,通常比单个决策树具有更好地预测准确度,并且使用默认参数时效果更好

关于XGBoost:

  • Kaggle里面经常用,特别适合处理表格数据类型(区别于图片视频等)
  • 主要思想:通过基础预测构建初始模型,然后构建一个新模型来预测,并添加到模型集合中,计算新错误,构建下一个模型,如此循环
  • 参数n_estimators:指完成上述建模周期的次数,过多可能过拟合,过少可能欠拟合
  • 参数early_stopping_rounds:可以为n_estimators设置一个高值,然后用early_stopping_rounds通过迭代寻找最佳值

关于sklearn.pipeline:先占位 没看懂

关于交叉验证Cross Validation:

  • 划分训练集与测试集的工具train_test_split的缺点:测试集越大,对模型的预测质量越高,但较小的训练集则意味着更糟糕的模型
  • 交叉验证在不同的数据子集上运行建模过程,以获得多个模型质量度量,例如我们将数据平均分为5个部分,做5次建模过程,第一次将第一个20%的数据作为测试集,其余80%作为训练集,以此类推,我们就得到了基于所有数据的模型质量度量
  • 交叉验证与train_test_split的取舍:交叉验证可以更准确地衡量模型质量,但需要更长的运行时间,如果数据集较小,那用交叉验证很合适,如果数据集较大,那么简单的直接分割就足够了;或者,可以运行交叉验证查看每个模型的分数是否接近,如果结果相同,那么直接划分就足够了